package org.lyfeng.spring.aop.support;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;
import java.util.List;

/**
 * 代理工厂
 * @author leiyufeng
 * 2013-4-26 下午4:50:00
 */
public class ProxyFactory {
	/**
	 * 创建一个代理
	 * @param obj 被代理对象
	 * @param type
	 * @return
	 */
	public static Object createProxy(Object obj,ProxyType type)
	{
//		Proxy proxy=null;
		Object proxyObj=null;
		switch(type)
		{
		case JDK:
			break;
		case CGLIB:
			break;
		default:
			break;
		}
		return proxyObj;
	}
	/**
	 * 创建一个代理
	 * @param obj 被代理对象
	 * @param chain 
	 * @param type
	 * @return
	 */
	public static Object createProxy(Object obj,List<Object> chain,ProxyType type)
	{
		ClassLoader classLoader=obj.getClass().getClassLoader();
		Object target=obj;
		Object proxy;
		for(Object o:chain)
		{
			InvocationHandler h=new JDKProxy(target, o);
			proxy=Proxy.newProxyInstance(classLoader, obj.getClass().getInterfaces(), h);
			target=proxy;
		}
		return target;
	}

}
